package com.hb.B_面向对象.A_类与继承


/**
 * 在 Kotlin 中的一个类可以有一个主构造函数和一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(和可选的类型参数)后。
 */
fun main() {

}

class Person constructor(firstName: String) {

}

//如果主构造函数没有任何注解或者可见性修饰符，可以省略这个 constructor 关键字。
class Person2(firstName: String) {
}
//主构造函数不能包含任何的代码。初始化的代码可以放 到以 init 关键字作为前缀的初始化 块(initializer blocks)中:
class Customer(name: String) {
    //注意，主构造的参数可以在初始化块中使用。它们也可以在 类体内声明的属性初始化器中使 用:
    init {
       println("Customer initialized with value ${name}")
    }
    val customerKey = name.toUpperCase()
}

//事实上，声明属性以及从主构造函数初始化属性，Kotlin 有简洁的语法:
class Person3(val firstName: String, val lastName: String, var age: Int) {

    /**
     * 与普通属性一样，主构造函数中声明的属性可以是 可变的( var )或只读的( val )。
     * 如果构造函数有注解或可见性修饰符，这个 constructor 关键字是必需的，并且 这些修饰符在它前面:
     *   class Customer public @Inject constructor(name: String) { ...... }
     */
// ......
}

//次构造函数
//类也可以声明前缀有 constructor 的次构造函数
class Person4{
    constructor(parent: Person4) {

    }
}

